home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / diskutil / argus.arc / ARGUS.S < prev    next >
Text File  |  1986-02-06  |  7KB  |  239 lines

  1. ;-------------------------------------------------------------------------
  2. ;
  3. ;  ARGUS : Hooks itself into BIOS call RWABS.
  4. ;  It displays its parameters in the upper right screen corner
  5. ;
  6. ;  Find out for yourself about possible applications ...
  7. ;
  8. ;  N.B. Like all software, this program is free. Copy it as you like.
  9. ;       Modify it (I will do, too). Enhance it. Add bells & whistles.
  10. ;
  11. ;       I'm not asking you here to send me money. Instead, if you've
  12. ;       done a nice enhancement (or got a nice piece of software
  13. ;       working 'better' with ARGUS's help), give them to the person
  14. ;       you got ARGUS from.
  15. ;       Sooner or later, this will reach me, too, and even have some
  16. ;       people benefit of the system during the transit.
  17. ;
  18. ;       Happy hacking, greetings to Arthur Dent,
  19. ;
  20. ;                            --- KS ---
  21. ;
  22. ;------------------------------------------------------------------------
  23.  
  24. start: jmp entry
  25.  
  26. aid:     dc.l $484237
  27.  
  28. ;---------------------------------------
  29. ;       define some constants
  30. ;---------------------------------------
  31. vduhireg   = $ff8201
  32. vdumidreg  = $ff8203
  33.  
  34. homeline   = 0
  35. homecol    = 50
  36.  
  37. uparrow    = 1
  38. rightarrow = 3
  39. clock      = 9
  40.  
  41.  
  42. ;---------------------------------------
  43. ;    define memory storage locations
  44. ;---------------------------------------
  45. oldrwabs:  dc.l 0 ; init stores former rwabs vector here
  46. oldrts:     dc.l 0 ; indirect return vector stored here
  47. vduaddress: dc.l $f8000 ; holds video address
  48. fontbase:   dc.l 0 ; init stores font character data address here
  49.  
  50. device:     dc.w 0 ; drive 0->A,1->B ...
  51. track:      dc.w 0
  52. sector:     dc.w 0
  53. recnbr:     dc.w 0
  54. rwflg:      dc.w 0
  55. bufad:      dc.l 0 ; adress of buffer where to store sectors
  56. count:      dc.w 0 ; number of sectors to read
  57.  
  58. colpos:    dc.l 0 ; cursor column
  59. linpos:    dc.l 0 ; cursor line
  60.  
  61.            even
  62.  
  63. ;-----------------------------------
  64. ;    define utility routines
  65. ;-----------------------------------
  66.  
  67. calcvdu: ;
  68.          ; compute video memory start adress,return in d0
  69.          ; and store in vduaddress
  70.          move.l #clcvdu1,-(sp)
  71.          move.w #38,-(sp)
  72.          trap #14
  73.          addq.l #6,sp
  74.          rts
  75. clcvdu1: clr.l d0
  76.          move.b vduhireg,d0
  77.          asl.w #8,d0
  78.          move.b vdumidreg,d0
  79.          asl.l #8,d0
  80.          move.l d0,vduaddress
  81.          rts
  82.  
  83. calchar: ; compute 8x8 system font base address & store
  84.          dc.w $a000 ; line A call (get params,a1 points to fonts)
  85.          move.l  4(a1),a0 ; 8x8 font's adress is second in table
  86.          move.l 76(a0),a0 ; at offset 76 is the pointer to font data
  87.          move.l a0,fontbase ; store
  88.          rts
  89.  
  90. writec:  ; output character in d0 (ascii) to screen.
  91.          ; suppose vdu start and font start are setup OK
  92.          movem.l d0/a0/a1,-(sp) ; those will be modified
  93.          and.l #$ff,d0 ; mask off upper bits
  94.          move.l fontbase,a0
  95.          add.l d0,a0   ; a0 points to character bits
  96.          move.l linpos,d0
  97.          mulu  #640,d0
  98.          add.l colpos,d0
  99.          add.l vduaddress,d0
  100.          move.l d0,a1  ; a1 points into video ram
  101.          move.b     (a0), 80(a1)
  102.          move.b $100(a0),160(a1)
  103.          move.b $200(a0),240(a1)
  104.          move.b $300(a0),320(a1)
  105.          move.b $400(a0),400(a1)
  106.          move.b $500(a0),480(a1)
  107.          move.b $600(a0),560(a1)
  108.          move.b $700(a0),640(a1)
  109.          addq.l #1,colpos
  110.          cmp.l #80,colpos
  111.          bne writec1
  112.          clr.l colpos
  113.          addq.l #1,linpos
  114.          cmp.l #25,linpos
  115.          bne writec1
  116.          clr.l linpos
  117. writec1: movem.l (sp)+,d0/a0/a1
  118.          rts
  119.  
  120. writes:  ; write (null terminated) string pointed at by a0
  121.          movem.l d0-d1/a0,-(sp)
  122.          move.w #79,d1
  123. writes1: move.b (a0)+,d0
  124.          beq qwrites
  125.          jsr writec
  126.          dbra d1,writes1 ; max 80 chrs if terminator is missing ...
  127. qwrites: movem.l (sp)+,d0-d1/a0
  128.          rts
  129.  
  130. hextab:  dc.b '0123456789ABCDEF' ; quick&dirty
  131.  
  132. writen:  ; write nibble in lower 4 bits of d0
  133.          movem.l d0/a0,-(sp)
  134.          and.l  #$0f,d0
  135.          move.l #hextab,a0
  136.          add.l d0,a0
  137.          move.b (a0),d0
  138.          jsr writec
  139.          movem.l (sp)+,d0/a0
  140.          rts
  141.  
  142. writeb:  ; write lower d0 byte
  143.          ror.b #4,d0
  144.          jsr writen
  145.          ror.b #4,d0
  146.          jsr writen
  147.          rts
  148.  
  149. writew:  ; write lower word in d0
  150.          ror.w #8,d0
  151.          jsr writeb
  152.          ror.w #8,d0
  153.          jsr writeb
  154.          rts
  155.  
  156. writel:  ; write d0 as longword
  157.          swap d0
  158.          jsr writew
  159.          swap d0
  160.          jsr writew
  161.          rts
  162.  
  163. entry:   move.l #init,-(sp)
  164.          move.w #38,-(sp)  ; have to call init in supervisor mode.
  165.          trap #14
  166.          addq.l #6,sp
  167.          move.w #0,-(sp)
  168.          move.l #500+last-start,-(sp) ; nonorthodox, but should work here
  169.          move.w #$31,-(sp) ; terminate & stay resident
  170.          trap #1
  171.  
  172. init:     jsr calcvdu
  173.           jsr calchar
  174.           move.l #$476,a0 ; get former rwabs address
  175.           move.l (a0),oldrwabs
  176.           move.l #myrwabs,(a0)
  177.           rts
  178.  
  179. myrwabs:  move.w  14(sp),device
  180.           move.w  12(sp),recnbr
  181.           move.w  10(sp),count
  182.           move.w   6(sp),bufad
  183.           move.w   4(sp),rwflg
  184.           move.l    (sp),oldrts
  185.           move.l  #myrts,(sp)
  186.           movem.l d0-d7/a0-a6,-(sp)
  187.           move.l  #homeline,linpos
  188.           move.l  #homecol,colpos
  189.  
  190.           move.b #'$',d0
  191.           jsr writec
  192.           move.l oldrts,d0
  193.           jsr writel
  194.           move.b #$20,d0
  195.           jsr writec
  196.           move.b #'A',d0
  197.           add.w device,d0
  198.           jsr writec
  199.           move.b #':',d0
  200.           jsr writec
  201.           move.b #rightarrow,d0
  202.           add.w rwflg,d0
  203.           jsr writec
  204.           move.l #recstr,a0
  205.           jsr writes
  206.           move.w recnbr,d0
  207.           jsr writew
  208.           move.b #$20,d0
  209.           jsr writec
  210.           jsr writec
  211.           move.b #'#',d0
  212.           jsr writec
  213.           move.w count,d0
  214.           jsr writew
  215.           move.b #rightarrow,d0
  216.           jsr writec
  217.           move.b #clock,d0
  218.           jsr writec
  219.           move.b #$20,d0
  220.           jsr writec
  221.           subq.l #2,colpos
  222.           movem.l (sp)+,d0-d7/a0-a6
  223.           move.l oldrwabs,a0
  224.           jmp (a0)
  225. myrts:    movem.l d0-d7/a0-a6,-(sp)
  226.           jsr writeb
  227.           movem.l (sp)+,d0-d7/a0-a6
  228.           move.l oldrts,a0
  229.           jmp (a0)
  230.  
  231. recstr:   dc.b "R#"
  232.           dc.b 0
  233.  
  234.           even
  235.  
  236. last:
  237.           end
  238.  
  239.